/*******************************************************************************
 * 版权：北京润尼尔网络科技有限公司，保留所有版权<br>
 * 版本：v1.0.0<br>
 * 文件：UICompositeCheckBoxTextHiddenInput.js<br>
 * 日期：2016年9月19日<br>
 * 作者: 杨顺强<br>
 * 功能：该组件由一个checkbox ，一段文字、一个隐藏的input组成。向外提供一个默认值，或者空值。<br>
 * 
 * 修改记录：<br>
 * 日期 描述 更新功能<br>
 ******************************************************************************/

window.makeNamespace(window,"Rainier.UI.V2");

/**
 * 函数名称：Rainier.UI.V2.UICompositeCheckBoxTextHiddenInput<br>
 * 函数功能：CheckBox组件类对象的定义<br>
 * 参数输入：<br>
 * 异常信息：<br>
 */
Rainier.UI.V2.UICompositeCheckBoxTextHiddenInput = Rainier.UI.V2.UIComposite.extend({
	
	NAME : "Rainier.UI.V2.UICompositeCheckBoxTextHiddenInput",
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeCheckBoxTextHiddenInput.init<br>
	 * 函数功能：组件初始化函数，完成对组件的初始化<br>
	 * 参数输入：objParentComposite ：UIComposite<br>
	 * 参数输入：objProperties : 
	 * {
	 *   optionName 	: "",	//参数值，该组件对应的参数值	必须有，用来标识该组件
	 *   checkbox		: true,	//该参数为boolean类型，直接赋值为true。即可。
	 *   text			:
	 *   {
	 *   	style:"",		//在text的样式，控制style的位置					
	 *   	text :"",		//该text的内容。
	 *   },
	 * 	 inputValue 	: ""	//提供一个默认值。不显示该组件。当选中对应的checkbox时，使用该值，不选中，则为空。
	 * } 
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	init : function(objParentComposite,objProperties){
		//当前组件中的子组件
		this.inputComponent	= null;
		//自组件初始化参数
		if(objProperties.optionName){
			this.optionName = objProperties.optionName;
		}else{
			throw new Error("optionName 不能为空,必须为参数名赋值");
		}
		
		if(objProperties.checkbox){
			this.checkboxProperties = {};
		}else{
			throw new Error("请确定您要使用的组件。使用该组件，必须为checkbox赋值为true");
		}
		
		if(objProperties.text){
			this.textPro = objProperties.text;
		}else{
			throw new Error("请确定您要使用的组件。使用该组件，必须为text赋值为");
		}
		
		if(objProperties.inputValue){
			this.inputValue = objProperties.inputValue;
		}else{
			throw new Error("请确定您要使用的组件。使用该组件，必须为inputValue赋值");
		}

		this._super(objParentComposite,objProperties);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeCheckBoxInput.createComposite<br>
	 * 函数功能：组件创建函数，完成对组件的创建工作<br>
	 * 参数输入：eleParent ： 父节点Tag<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	createComposite: function(eleParent){
		this._super(eleParent);
		var newEle = this.CreateElement("div",this.m_objProperties.id,null,{style:"margin-left:10px;margin-top:10px;float:left;"});
		eleParent.append(newEle);
		
		//为该组件添加子组件
		this.checkBox 		= new Rainier.UI.V2.UICompositeCheckBox(this,this.checkboxProperties);
		this.textComponent	= new Rainier.UI.V2.UICompositeText(this,this.textPro);
		//创建input组件
		this.inputComponent = $("<input type='text' hidden style='width:150px;'>");
		this.inputComponent.attr("value","");
		newEle.append(this.inputComponent);
		
		var _this = this;
		//为checkBox添加点击事件
		this.checkBox.getElement().click(
			function(){
				value = _this.checkBox.getValue() ?_this.inputValue: "";
				_this.inputComponent.attr("value",value);
			}
		);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeCheckBoxInput.getDivOptionName<br>
	 * 函数功能：获取参数名字<br>
	 * 参数输入：无<br>
	 * 参数输出：<br>
	 * 函数返回：组件参数名字<br>
	 * 异常信息：无<br>
	 */
	getOptionName : function(){
		return this.optionName;
	},
	
	/**
	 * 函数名称：<br>
	 * 函数功能：<br>
	 * 参数输入：<br>
	 * 参数输出：<br>
	 * 函数返回：<br>
	 * 异常信息：<br>
	 */
	getCheckBox : function(){
		return this.checkBox;
	},
	
	/**
	 * 函数名称：<br>
	 * 函数功能：<br>
	 * 参数输入：<br>
	 * 参数输出：<br>
	 * 函数返回：<br>
	 * 异常信息：<br>
	 */
	checkBoxValueChanged : function(){
		value = this.checkBox.getValue() ?this.inputValue: "";
		this.inputComponent.attr("value",value);
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeCheckBoxInput.getComponentValueObj<br>
	 * 函数功能：获取div容器中的textbox的值,形成参数对象<br>
	 * 参数输入：无<br>
	 * 函数返回：div容器中的参数对象<br>
	 * 异常信息：无<br>
	 * 注：该方法为统一方法，请务必实验，供dialog获取当前组件的值
	 */
	getComponentValueObj : function(){
		var obj = {};
		optionName = this.optionName;
		obj[optionName] = null;
		var value = this.inputComponent.attr("value");
		obj[optionName] = value;
		return obj;
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.UICompositeCheckBoxInput.setComponentValue<br>
	 * 函数功能：为组件赋值，当需要设置组件的值时，完成对组件值得设置<br>
	 * 参数输入：sValue ：String 组件的值<br>
	 * 参数输出：无<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
	setComponentValue : function(sValue){
		if(this.checkBox.getValue()){			
			this.checkBox.getCheckBox().click();
		}
		this.inputComponent.attr("value",sValue);
	},
	
	/**
	 * 函数名称：<br>
	 * 函数功能：<br>
	 * 参数输入：<br>
	 * 参数输出：<br>
	 * 函数返回：<br>
	 * 异常信息：<br>
	 */
	disable: function(){
		this.checkBox.disable();
	}
});

